﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections.ObjectModel;
using System.Data;
using System.Data.SqlClient;
using System.Runtime.Serialization;

namespace WcfServiceAfvanding.Code
{
    [DataContract]
    public class Pumpe
    {
        SqlCommand sqlCommand;
        SqlConnection sqlConnection;

        private const string connectionString = "Data Source=ealdb1.eal.local;User ID=ejl02_usr;Password=Baz1nga2;Initial Catalog=EJL02_DB;Trusted_connection=False";
        SqlDataReader datareader;

        double vandkapcitet;
        bool kører;
        int pumpeId;

        [DataMember]
        public double Vandkapcitet
        {
            get { return vandkapcitet; }
            set { vandkapcitet= value; }
        }
        [DataMember]
        public bool Kører
        {
            get { return kører; }
            set { kører = value; }
        }
        [DataMember]
        public int PumpeId
        {
            get { return pumpeId; }
            set { pumpeId = value; }
        }

        public static ObservableCollection<Pumpe> HentPumper(int pumpestationsId)
        {
            SqlConnection con = new SqlConnection(connectionString);
            SqlCommand cmd = new SqlCommand();
            Pumpe pumpe;
            cmd.Parameters.Clear();

            cmd.Connection = con;
           // cmd.CommandText = "SELECT * FROM Pumpe, Pumpestation WHERE Pumpestation.pumpestationsId = '" + pumpestationsId + "'";
          //  cmd.CommandText = "HentPumpe";
            cmd.CommandText = "SELECT * FROM Pumpe WHERE Pumpe.pumpestationsId = '" + pumpestationsId + "'";
           // cmd.CommandText = "HentPumpe";
            con.Open();
            SqlDataReader datareader;

            SqlParameter par = new SqlParameter("@pumpestationsId", SqlDbType.Int);
            par.Value = pumpestationsId;
            cmd.Parameters.Add(par);

            datareader = cmd.ExecuteReader();

            ObservableCollection<Pumpe> pumper = new ObservableCollection<Pumpe>();

            while (datareader.Read() == true)
            {
                pumpe = new Pumpe();
                pumpe.pumpeId = ((int)datareader["pumpeId"]);
                pumpe.Vandkapcitet = ((double)datareader["vandKapacitet"]);
                pumpe.kører = ((bool)datareader["kører"]);
                pumper.Add(pumpe);
            }

            con.Close();

            return pumper;
        }

        public int OpretPumpe(double vandkapcitet, bool kører, int pumpestationsId)
        {
            sqlConnection = new SqlConnection(connectionString);
            sqlCommand = new SqlCommand();
            sqlCommand.Connection = sqlConnection;

            sqlCommand.CommandType = CommandType.StoredProcedure;
            sqlCommand.CommandText = "OpretPumpe"; // fortæl hvilken stored procedure
            sqlCommand.Parameters.Clear(); // tøm parameterlisten

            // sæt værdier ind i parametrene
            SqlParameter par = new SqlParameter("@pumpeId", SqlDbType.Int); // der instantieres en ny parameter til tabellen
            par.Value = pumpeId; // den nye parameter sættes = den lokale parameter
            par.Direction = ParameterDirection.Output; // Outputtet fortæller hvilken primary key det er
            sqlCommand.Parameters.Add(par); // gem parameteren i parameterlisten

            par = new SqlParameter("@vandKapacitet", SqlDbType.Float);
            par.Value = vandkapcitet;
            sqlCommand.Parameters.Add(par); // gem parameteren i parameterlisten

            par = new SqlParameter("@kører", SqlDbType.Bit);
            par.Value = kører;
            sqlCommand.Parameters.Add(par);

            par = new SqlParameter("@pumpestationsId", SqlDbType.Int);
            par.Value = pumpestationsId;
            sqlCommand.Parameters.Add(par);

            try
            {
                sqlConnection.Open(); // Åben forbindelsen til databasen
                sqlCommand.ExecuteNonQuery(); // den executer sql erklæringen til databasen og returnere de felter som er påvirket
                pumpeId = (int.Parse(sqlCommand.Parameters["@pumpeId"].Value.ToString())); // returner datatypen som er kundeId
                return pumpeId;
            }

            catch (SqlException e)
            {
                throw e;
            }

            finally  // eksekveres altid
            {
                if (sqlConnection.State == ConnectionState.Open)
                {
                    sqlConnection.Close(); // hvis connection var åben: så luk!!
                }
            }
        }

        public void RetPumpe(int pumpeId, double vandkapcitet, bool kører)
        {
            datareader = null;
            sqlCommand.CommandText = "RetPumpe";
            sqlCommand.Parameters.Clear();

            SqlParameter par = new SqlParameter("@pumpeId", SqlDbType.Int);
            par.Value = pumpeId;
            sqlCommand.Parameters.Add(par);

            par = new SqlParameter("@vandkapcitet", SqlDbType.Float);
            par.Value = vandkapcitet;
            sqlCommand.Parameters.Add(par);

            par = new SqlParameter("@kører", SqlDbType.Bit);
            par.Value = kører;
            sqlCommand.Parameters.Add(par);

            try
            {
                sqlConnection.Open(); // Åben forbindelsen til databasen
                sqlCommand.ExecuteNonQuery();
                //return (int.Parse(sqlCommand.Parameters["@pumpeId"].Value.ToString()));
            }

            catch (SqlException e)
            {
                throw e;
            }

            finally  // eksekveres altid
            {
                if (sqlConnection.State == ConnectionState.Open)
                {
                    sqlConnection.Close(); // hvis connection var åben: så luk!!
                }
            }
        }

        public void SletPumpe(int pumpeId)
        {
            sqlConnection = new SqlConnection(connectionString);
            sqlCommand = new SqlCommand();
            sqlCommand.Connection = sqlConnection;
            sqlCommand.CommandText = "DELETE FROM Pumpe WHERE pumpeId = '" + pumpeId + "'"; // fortæl hvilken stored procedure
            sqlCommand.Parameters.Clear(); // tøm parameterlisten

            // sæt værdier ind i parametrene
            SqlParameter par = new SqlParameter("@pumpeId", SqlDbType.Int);
            par.Value = pumpeId;
            sqlCommand.Parameters.Add(par); // gem parameteren i parameterlisten

            try
            {
                sqlConnection.Open(); // Åben forbindelsen til databasen
                sqlCommand.ExecuteNonQuery();
            }

            catch (SqlException e)
            {
                throw e;
            }

            finally  // eksekveres altid
            {
                if (sqlConnection.State == ConnectionState.Open)
                {
                    sqlConnection.Close(); // hvis connection var åben: så luk!!
                }
            }
        }
    }
}